package com.zl.basic.CommonUtil;

import java.util.List;

import com.google.common.base.Preconditions;

/**
 * User: zl email:c3tc3tc3t@126.com Date: 14-1-16 Time: 上午10:36 用于检查方法返回值和传递给方法的参数
 */
public class Check {
  /**
   * 检查参数是否为空和空字符串
   * 
   * @param arg 被检查字符串
   */
  public static void checkStringNull(String arg) {
    try {
      Preconditions.checkNotNull(arg, "***参数为null***");
      Preconditions.checkState(!(arg.length() == 0), "***参数长度为0***");
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage());
    }
  }


  /**
   * 检查参数是否为空,为空抛出异常,不为空就返回被验证的值
   * 
   * @param message 抛出的提示自定义信息
   * @param o 被验证的值
   */
  public static <T> T checkAnyNull(T o, String message) {
    try {
      return Preconditions.checkNotNull(o, message);
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage());
    }
  }

  /**
   * 检测对象是否为空，不为空就抛出异常
   * 
   * @param o 被检测对象
   * @param <T> 声明可以被传入任何类型的泛型
   * 
   */
  public static <T> void checkIsNull(List<T> o, String message) {

    if (null != o && o.size() > 0) {
      throw new RuntimeException(message);
    }
  }


  public static <T> T checkAnyNull(T o) {
    return checkAnyNull(o, "***参数为空***");
  }

  /**
   * 检查字符串参数是否相等
   * 
   * @param arg1 比较参数1
   * @param arg2 比较参数2
   * @param message 抛出的提示自定义信息
   */
  public static void checkStringEqual(String arg1, String arg2, String message) {
    try {
      Preconditions.checkState(arg1.equals(arg2), message);
    } catch (Exception e) {
      throw new RuntimeException(e.getMessage());
    }
  }

  public static void checkStringEqual(String arg1, String arg2) {
    checkStringEqual(arg1, arg2, "***参数不相等***");
  }
}
